home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_400 / 422_01 / libcf / serio.asm < prev    next >
Encoding:
Assembly Source File  |  1994-03-27  |  2.3 KB  |  104 lines

  1. *
  2. * Write a string to the console: putstr(string)
  3. *
  4. putstr    LDI    2,S        Get argument
  5. ?putstr    LDB    I        Get char
  6.     SJZ    ?2        Exit
  7.     LEAI    1,I        Advance
  8.     PUSHA            Pass parm
  9.     CALL    ?putch        Output it
  10.     LD    S+        Clean stack
  11.     SJMP    ?putstr        And proceed
  12. *
  13. * Output character to console with newline translation: putch(c)
  14. *
  15. putch    LD    2,S        Get character
  16. ?putch    CMP    #$0A        Newline?
  17.     SJZ    putchr        No, don't process
  18.     LDB    #$0D        Get RETURN
  19.     CALL    ?putchr        Output it
  20. *
  21. * Output 'raw' character to console: putchr(c)
  22. *
  23. putchr    LD    2,S        Get character
  24. ?putchr    OUT    0        Write to console
  25.     RET
  26. *
  27. * Read a character from console with newline translation: getch()
  28. *
  29. getch    CALL    chkch        Test for character ready
  30.     SJZ    getch        Wait for it
  31.     RET
  32. *
  33. * Read 'raw' character from console: getchr()
  34. *
  35. getchr    IN    0        Read console port
  36.     INC            Test for character
  37.     SJZ    getchr        Wait for character
  38.     DEC            Restore proper character
  39.     RET
  40. *
  41. * Check for character from the console with translation: chkch()
  42. *
  43. chkch    IN    0        Read port 0
  44.     INC            Test for char
  45.     SJZ    ?2        None, exit
  46.     DEC            Restore proper char
  47.     PUSHA            Save for later
  48.     CMPB    #$0D        RETURN?
  49.     SJZ    ?1        No, its OK
  50.     LD    S+        Clean stack
  51.     LDB    #$0A        Get NEWLINE
  52.     RET
  53. ?1    LD    S+        Get char back
  54. ?2    RET
  55. *
  56. * Check for 'raw' character from the console: chkchr()
  57. *
  58. chkchr    IN    0        Read port 0
  59.     RET
  60. *
  61. * Get string from console (with editing): getstr(string, size)
  62. *
  63. getstr    CLR            Zero length
  64.     PUSHA            Save on stack
  65. ?3    CALL    getchr        Get a character
  66.     LDI    #?4        Point to table
  67.     SWITCH            Dispatch
  68. ?4    FDB    ?6,$08        Backspace
  69.     FDB    ?6,$7F        Delete
  70.     FDB    ?7,$0D        Return
  71.     FDB    0,?5        Default
  72. * Normal character
  73. ?5    STB    ?temp        Save for later
  74.     LD    ,S        Get current position
  75.     CMP    4,S        Are we OK
  76.     UGE            Test for over
  77.     SJNZ    ?3        Ignore
  78.     LDI    6,S        Get pointer
  79.     LD    S+        Get size
  80.     ADAI            Adjust pointer
  81.     INC            Advance count
  82.     PUSHA            Resave
  83.     LDB    ?temp        Get char back
  84.     STB    I        Save in buffer
  85.     CALL    ?putchr        Echo it
  86.     SJMP    ?3        And proceed
  87. * Backspace & delete
  88. ?6    LD    ,S        Get count
  89.     SJZ    ?3        At zero, ignore
  90.     DEC            Backup
  91.     ST    ,S        Resave
  92.     LDI    #?8        Point to message
  93.     CALL    ?putstr        Output
  94.     SJMP    ?3        And proceed
  95. * RETURN, terminate entry
  96. ?7    LDI    6,S        Get buffer pointer
  97.     LD    S+        Get count
  98.     ADAI            Adjust pointer
  99.     CLR            Get zero
  100.     STB    I        Terminate buffer
  101.     LDB    #$0A        Newline
  102.     SJMP    ?putchr        Output
  103. ?8    FCB    $08,' ',$08,0
  104.